//
//  LSHomeViewController.swift
//  新浪微博---01次
//
//  Created by 李宗帅 on 16/5/3.
//  Copyright © 2016年 LS. All rights reserved.
//

import UIKit
import SVProgressHUD
let LSHomeViewControllerReusableCellIdentifier = "LSHomeViewControllerReusableCellIdentifier"
class LSHomeViewController: LSBaseTableViewController {


    override func viewDidLoad() {
      

        
        if isLogin {
            //如果登录了  要通过token请求数据
            LSOauthViewModel.shareInstance.access_token
            

            super.viewDidLoad()

            
            tableView.registerClass(LSHomeTableViewCell.self, forCellReuseIdentifier: LSHomeViewControllerReusableCellIdentifier)
            
            loadData()
            
            tableView.rowHeight = UITableViewAutomaticDimension
            
            tableView.estimatedRowHeight = 200
            //把菊花添加到footView上
            tableView.tableFooterView = pullView
//            refreshControl = UIRefreshControl()
            
            tableView.addSubview(refreshView)
            
            /**
            *  KVO的使用
            *  第一个参数: 观察者
            *  第二个参数: 观察的属性
            *  第三个参数: 是枚举,有两个状态,一个Old  一个New  是观察值得改变
            *  观察者必须要实现addObserverValueForKeyPath这个方法
            */
//            tableView.addObserver(self, forKeyPath: "contentOffset", options: .New, context: nil)
            
            refreshView.addTarget(self, action: "loadData", forControlEvents: UIControlEvents.ValueChanged)
        } else {
            visitorView?.setupInfo("关注一些人，回这里看看有什么惊喜", image: nil)

            
        }
        
        
//        let closure = {
//            printLog("回调成功")
//        }
//        
//        let loginClosure = {
//            printLog("登录回调成功")
//        }
//        
//        visitorView?.registerClosure = closure
//        
//        visitorView?.loginClosure = loginClosure
        
        //不能每个控制器都设置一次AFN啊  所以我们要抽取一个网络工具类
//        let afn = AFHTTPSessionManager()
//        
//        afn.GET(<#T##URLString: String##String#>, parameters: <#T##AnyObject?#>, progress: <#T##((NSProgress) -> Void)?##((NSProgress) -> Void)?##(NSProgress) -> Void#>, success: <#T##((NSURLSessionDataTask, AnyObject?) -> Void)?##((NSURLSessionDataTask, AnyObject?) -> Void)?##(NSURLSessionDataTask, AnyObject?) -> Void#>, failure: <#T##((NSURLSessionDataTask?, NSError) -> Void)?##((NSURLSessionDataTask?, NSError) -> Void)?##(NSURLSessionDataTask?, NSError) -> Void#>)
        
        
    }
    
    

    func loadData() {

        SVProgressHUD.show()
        
        var max_id = 0
        
        var since_id = 0
        
        // 每次拉下刷新的时候，都需要传递一个since_id
        since_id = LSStatusListViewModel.shareInstance.statusList.first?.status?.id
            ?? 0
        // 需要上拉更多的时候 修改 max_id
        if pullView.isAnimating(){
            
            max_id = LSStatusListViewModel.shareInstance.statusList.last?.status?.id ?? 0
            
            // 再次确保since_id = 0
            since_id = 0
            
            
        }
      
        LSStatusListViewModel.shareInstance.loadData(since_id, max_id: max_id, succe: { (count: Int) -> () in
            
            self.tableView.reloadData()
            
            SVProgressHUD.dismiss()
            
            //加载完成之后 让菊花停止转动
            self.pullView.stopAnimating()
            
            //让下拉刷新停止动画
            self.refreshView.endRefreshing()
            
            //显示更新提示
            self.show(count)

            }) { (error) -> () in
                
                SVProgressHUD.dismiss()
        }
    }
    
    private func show(count: Int){
        
        let labelHeight: CGFloat = 35
        
        let label = UILabel(frame: CGRectMake(0, -labelHeight, UIScreen.mainScreen().bounds.width, labelHeight))
        
        label.backgroundColor = UIColor.orangeColor()
        
        label.textAlignment = .Center
        
        if count > 0 {
            label.text = "更新了\(count)条微博"
        } else {
            
            label.text = "暂无更新"
        }
        
        label.textColor = UIColor.blackColor()
        
        label.font = UIFont.systemFontOfSize(16)
        
        view.addSubview(label)
        
        UIView.animateWithDuration(1.0, animations: { () -> Void in
            label.transform = CGAffineTransformMakeTranslation(0, labelHeight)
            }) { (_) -> Void in
                
                UIView.animateWithDuration(1.0, animations: { () -> Void in
                    label.transform = CGAffineTransformIdentity
                    }, completion: { (_) -> Void in
                        //动画全部完成
                        label.removeFromSuperview()
                })
        }
        
    }
    
    //kvo的方法
//    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
//        
//        let tableView = object as? UIScrollView
//        
//        
//        
//    }
  
//    懒加载 菊花
         private lazy var pullView: UIActivityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray)
    //懒加载 下拉刷新
    private lazy var refreshView :LSRefreshControlView = LSRefreshControlView()
}




extension LSHomeViewController {
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return LSStatusListViewModel.shareInstance.statusList.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        //这里从缓存池中加载自定义cell的时候  需要转一下格式,  以为该方法返回的是非可选的cell 所以强制转
        let cell = tableView.dequeueReusableCellWithIdentifier(LSHomeViewControllerReusableCellIdentifier, forIndexPath: indexPath) as! LSHomeTableViewCell
        
        cell.statusViewModel = LSStatusListViewModel.shareInstance.statusList[indexPath.row]
        
        //当现实倒数第二行数据的时候  菊花开始转动
        if indexPath.row == LSStatusListViewModel.shareInstance.statusList.count - 2 {
            //开启加载动画
            pullView.startAnimating()
            
            //显示倒数第二条数据的时候 加载新数据
            loadData()
        }
        
        return cell
    
    }
}
